package com.cskaoyan.controller;

import com.cskaoyan.bean.BaseRespVo;
import com.cskaoyan.bean.User;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.support.ConfigurableConversionService;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * @author stone
 * @date 2021/12/30 17:19
 */
@RestController
@RequestMapping("user")
public class UserController {

    // 直接接收请求参数
    @RequestMapping("register")
    public BaseRespVo register(String username,String password,String age,String gender) {
        return BaseRespVo.ok(username + ":" + password);
    }

    // 直接接收请求参数
    // 在形参中可以直接使用基本类型，或者其包装类来接收 String → 你接收的类型
    // SpringMVC给我们提供了类型转换器
    @RequestMapping("register2")
    //public BaseRespVo register2(String username,String password,int age,String gender) {
    public BaseRespVo register2(String username,String password,Integer age,String gender) {
        //
        return BaseRespVo.ok(username + ":" + password + ";age = " + age);
    }

    // 接收数组 → 请求参数名和Handler方法的形参名一致，数组的类型根据你的参数的类型选择
    @RequestMapping("register3")
    public BaseRespVo register3(String username,String password,
                                Integer age,String gender,
                                String[] hobbys) {

        return BaseRespVo.ok(hobbys);
    }


    // 接收日期 → 请求参数名和Handler方法的形参名一致
    @RequestMapping("register4")
    public BaseRespVo register4(String username, String password,
                                Integer age, String gender,
                                String[] hobbys, Date birthday) {

        return BaseRespVo.ok(hobbys);
    }


    // 接收日期 → 请求参数名和Handler方法的形参名一致
    //指定接收的日期格式
    //birthday=1991-06-13
    @RequestMapping("register5")
    public BaseRespVo register5(String username, String password,
                                Integer age, String gender,
                                String[] hobbys,
                                @DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday) {

        return BaseRespVo.ok(hobbys);
    }

    @Autowired
    ConfigurableConversionService conversionService;

    // 接收日期
    //自定义的类型转换器 → 请求参数名和Handler方法的形参名一致，来看类型转换器列表里是否包含形参类型的转换器
    //birthday=1991-06-13
    @RequestMapping("register6")
    public BaseRespVo register6(String username, String password,
                                Integer age, String gender,
                                String[] hobbys,
                                Date birthday) {

        return BaseRespVo.ok(birthday);//做baseRespVo实例转换为字符串的过程中
    }


    // 以JavaBean来接收请求参数 → 请求参数名和JavaBean的成员变量名（set方法）一致
    @RequestMapping("register7")
    public BaseRespVo register7(User user) {
        //以JavaBean来进行接收 → 实际上使用的JavaBean的无参构造方法和set方法来封装的
        //User user1 = new User();
        //user1.setUsername();
        //user1.setPassword();

        return BaseRespVo.ok();//做baseRespVo实例转换为字符串的过程中
    }
    @RequestMapping("query")
    public BaseRespVo queryUsers(Integer age, String gender, PageInfo pageInfo){

        return BaseRespVo.ok();
    }
    @RequestMapping("query2")
    public BaseRespVo queryUsers2(UserPageInfo pageInfo){

        return BaseRespVo.ok();
    }

}
@Data
class PageInfo{
    Integer page;
    Integer limit;
}
@Data
class UserPageInfo extends PageInfo{
    Integer age;
    String gender;
}
